package com.cat.chapter037;

/**
 * @author cat
 * @description
 * @create 2025/6/20 19:04
 * @since JDK17
 */

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MarkdownImageNumberReplacer {
    public static void main(String[] args) {
        // 输入和输出文件路径
        int num = 1;
        for (int i = 1; i < 12; i++) {
            String name = i < 10 ? "0" + i : String.valueOf(i);
            String inputFilePath = String.format("D:\\note\\vue\\md\\day%s\\day%s.md", name, name);
            String outputFilePath = String.format("D:\\note\\vue\\md\\day%s\\day%s.md", name, name);
            try {
                // 读取文件内容
                String content = readFile(inputFilePath);

                // 替换第一个匹配的图片编号
                String replacedContent = replaceAllImageNumbers(content);

                // 写入替换后的内容到新文件
                writeFile(outputFilePath, replacedContent);

                System.out.println("替换完成！处理后的文件已保存到: " + outputFilePath);
            } catch (IOException e) {
                System.err.println("处理文件时发生错误: " + e.getMessage());
            }
        }


    }

    /**
     * 读取文件内容
     */
    private static String readFile(String filePath) throws IOException {
        StringBuilder content = new StringBuilder();
        try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
            String line;
            while ((line = reader.readLine()) != null) {
                content.append(line).append("\n");
            }
        }
        return content.toString();
    }

    /**
     * 写入内容到文件
     */
    private static void writeFile(String filePath, String content) throws IOException {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
            writer.write(content);
        }
    }

    /**
     * 替换第一个匹配的图片编号
     */
    private static String replaceFirstImageNumber(String content) {
        // 定义正则表达式模式，匹配![number](assets/number)格式
        // 注意使用非贪婪匹配和捕获组
        Pattern pattern = Pattern.compile("!\\[(.*?)\\]\\(assets/(.*?)\\)");
        Matcher matcher = pattern.matcher(content);

        // 只替换第一个匹配项
        if (matcher.find()) {
            // 获取原始匹配的内容
            String original = matcher.group(0);
            // 构建替换后的内容，将第二个括号内的内容替换为1000
            String replacement = "![" + 1000 + "](assets/" + matcher.group(2) + ".png)";

            // 进行替换
            return content.replaceFirst(Pattern.quote(original), Matcher.quoteReplacement(replacement));
        }

        // 如果没有匹配项，返回原始内容
        return content;
    }

    /**
     * 替换所有匹配的图片编号
     */
    private static String replaceAllImageNumbers(String content) {
        // 定义正则表达式模式，匹配![数字](assets/数字.png)格式
        // 捕获组1: 图片alt文本中的数字
        // 捕获组2: 路径中的数字部分(不包括.png扩展名)
        Pattern pattern = Pattern.compile("!\\[(\\d+)\\]\\(assets/(\\d+)\\.png\\)");
        Matcher matcher = pattern.matcher(content);

        // 使用StringBuffer进行替换，支持正则表达式替换
        StringBuffer sb = new StringBuffer();

        // 遍历所有匹配项并替换
        while (matcher.find()) {
            // 获取第二个捕获组(路径中的数字部分)
            String originalNumber = matcher.group(2);
            // 构建替换文本，将路径中的数字部分替换为1000
//            String replacement = "![" + matcher.group(1) + "](assets/1000.png)";
            String replacement = "![" + 1000 + "](assets/" + matcher.group(2) + ".png)";

            // 替换当前匹配项
            matcher.appendReplacement(sb, Matcher.quoteReplacement(replacement));
        }

        // 添加剩余的文本
        matcher.appendTail(sb);

        return sb.toString();
    }
}